import { resetRouter } from '@/router'
// 导入登陆 , 获取用户基本信息 接口
import { login, getUserInfoAPI } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
const state = () => {
  return {
    // 用户令牌
    // 刷新页面的时候，从本地取token，借助逻辑或短路
    token: getToken() || '',
    // 用户信息
    userInfo: {}
  }
}

const mutations = {
  // 设置token
  setToken: (state, token) => {
    state.token = token
    // 本地存一份token
    setToken(token)
  },
  // 设置用户信息
  setuserInfo: (state, userInfo) => {
    state.userInfo = userInfo
  },
  // 移除token
  removeToken: (state) => {
    state.token = ''
    // 清空本地token
    removeToken()
  },
  // 清空用户信息
  removeuserInfo: (state) => {
    state.userInfo = ''
  }
}

const actions = {
  // 给token赋值操作
  // 登录action
  loginAction: async ({ commit }, loginForm) => {
    // 发起登录请求
    const resp = await login(loginForm)
    // console.log(resp)
    // 提交mutation
    commit('setToken', resp.data.token)
  },
  // 退出登录Action
  logoutAction: ({ commit }) => {
    commit('removeToken')
    commit('removeuserInfo')

    // 重置路由实例(把所有路由信息删除)
    resetRouter()
    // 清空vuex中的路由信息
    commit('router/removeRoutes', null, { root: true })
    // 重置主题色
    commit('settings/resetTheme', null, { root: true })
  },
  // 获取用户信息Action
  getuserInfoAction: async ({ commit }) => {
    const { data: userProfile } = await getUserInfoAPI()
    // 解构重命名
    // console.log(userProfile.userId)
    // 基于此次接口返回的userId继续发请第2次请求(获取用户头像等信息)
    // const { data: userInfo } = await getUserInfoAPI(userProfile.userId)
    // 提交mutation
    // {...userProfile, ...userInfo}两个对象合并作为参数传给mutation函数
    // const userObj = { ...userProfile, ...userInfo }
    const userObj = userProfile
    // 提交mutation
    commit('setuserInfo', userObj)
    // 返回userObj
    return userObj
  }
}
export default {
  // 开启命名空间
  namespaced: true,
  state,
  mutations,
  actions
}
